Jerry's Log

git - commit convention

contents

Git 커밋 컨벤션은 커밋 메시지 형식을 정하는 일련의 규칙입니다. 그 목적은 사람과 자동화 도구 모두에게 유용한, 깨끗하고 표준화되었으며 쉽게 파싱할 수 있는 커밋 히스토리(로그)를 만드는 것입니다.

가장 인기 있고 널리 채택된 표준은 Conventional Commits(관례적인 커밋) 라고 불립니다. 이는 모든 커밋에 대해 간단하고 구조화된 형식을 제공합니다.


커밋 컨벤션을 사용하는 이유

"버그 수정" 또는 "추가 작업"처럼 무작위적인 메시지로 코드를 커밋하면 프로젝트 히스토리를 쓸모없게 만듭니다. 컨벤션을 채택하면 네 가지 주요 이점이 있습니다.

  1. 🤖 자동 CHANGELOG 생성: 도구가 커밋 히스토리를 파싱하여 릴리즈 노트를 위한 CHANGELOG.md 파일을 자동으로 생성할 수 있습니다.
  2. 🤖 자동 버전 관리: 커밋 타입(feat, fix, BREAKING CHANGE)을 사용하여 시맨틱 버저닝(SemVer) 에 따라 다음 버전 번호를 자동으로 결정할 수 있습니다.
    • feat마이너(minor) 버전을 올립니다 (예: 1.2.0 -> 1.3.0).
    • fix패치(patch) 버전을 올립니다 (예: 1.2.0 -> 1.2.1).
    • BREAKING CHANGE:가 포함된 커밋은 메이저(major) 버전을 올립니다 (예: 1.2.0 -> 2.0.0).
  3. 📖 가독성 향상: git log가 프로젝트의 진화 과정을 보여주는 명확하고 스캔하기 쉬운 기록이 됩니다. 누구나 무엇이 왜 변경되었는지 빠르게 이해할 수 있습니다.
  4. 🎯 쉬운 디버깅: 버그를 찾을 때 docsstyle 같은 커밋은 쉽게 건너뛸 수 있습니다. git bisect와 같은 도구가 훨씬 더 효과적이 됩니다.

Conventional Commit의 구조

Conventional Commit 메시지는 세 가지 주요 부분으로 구성됩니다.

<타입>[선택적 스코프]: <제목>
<빈 줄>
[선택적 본문]
<빈 줄>
[선택적 꼬리말]

1. 헤더 (필수)

헤더는 가장 중요한 세 가지 정보를 포함하는 한 줄입니다.

<타입> 수행한 변경의 종류를 설명합니다. 짧은 소문자 키워드입니다. 가장 일반적인 유형은 다음 섹션에 나열되어 있습니다.

[선택적 스코프] 이 커밋이 영향을 미치는 코드베이스의 부분을 지정하는 명사입니다 (괄호 안에).

<제목> 변경 사항에 대한 짧고 설명적인 요약입니다.


2. 본문 (선택 사항)

본문은 변경 사항에 대한 더 자세한 맥락을 제공하는 데 사용됩니다.


3. 꼬리말 (선택 사항)

꼬리말은 메타데이터에 사용되며 본문과 반드시 한 줄의 빈 줄로 구분되어야 합니다.


일반적인 커밋 타입 (어휘)

다음은 Conventional Commits 명세에 정의된 가장 일반적인 타입입니다.


전체 예시

모든 부분을 사용한 복잡한 커밋 메시지의 예는 다음과 같습니다.

feat(auth): add OAuth 2.0 login flow

새로운 인증 제공자로 Google의 OIDC 호환 전체 흐름을 구현합니다.
이를 통해 사용자는 원클릭으로 가입하고 로그인할 수 있습니다.

이 변경은 사용 중단될 예정인 기존의 username/password 시스템을
대체하기 위해 필요합니다.

BREAKING CHANGE: /login API 엔드포인트는 더 이상 username과
password를 받지 않습니다. 이제 제공자로부터 받은 `id_token`을
포함한 `POST` 요청을 기대합니다.

Fixes: #123, #456

컨벤션을 강제하는 방법 (도구)

이러한 규칙을 일일이 기억할 필요는 없습니다. 팀은 도구를 사용하여 자동으로 강제합니다.

references